#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
#define maxn 5005

int n,m;
vector<int> G[maxn];
vector<int> rG[maxn];
vector<int> seq;
bool used[maxn];
int sccid[maxn];
int sccnum[maxn];

void add_edge(int u, int v){
	G[u].push_back(v);
	rG[v].push_back(u);
}
void dfs(int u){
	used[u]=true;
	for(auto v:G[u]){
		if(!used[v]) dfs(v);
	}
	seq.push_back(u);
}
void rdfs(int u, int csccid){
	used[u]=true;
	sccid[u]=csccid;
	sccnum[csccid]++;
	for(auto v:rG[u]){
		if(!used[v]) rdfs(v, csccid);
	}
}
int scc(){
	memset(used,0,sizeof(used));
	seq.clear();
	for(int u=1;u<=n;u++){
		if(!used[u]) dfs(u);
	}
	memset(used,0,sizeof(used));
	int csccid=0;
	for(int i=seq.size();i>=0;i--){
		int v=seq[i];
		if(used[v]) continue;
		rdfs(v, csccid);
		csccid++;
	}
	return csccid;
}

int main(){
	cin>>n>>m;
	for(int i=0;i<m;i++){
		int u,v,k;
		cin>>u>>v>>k;
		add_edge(u,v);
		if(k==2) add_edge(v,u);
	}
	int wsccnum=scc();
	int chosen_sccid=0;
	for(int u=1;u<=n;u++){
		if(sccnum[sccid[u]]>2){
			cout<<sccnum[sccid[u]]<<endl;
			chosen_sccid=sccid[u];
			break;
		}
	}
	for(int u=1;u<=n;u++){
		if(sccid[u]==chosen_sccid){
			cout<<u<<" ";
		}
	}
	cout<<endl;
	return 0;
}
